#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/select.h>

// 简单加密函数：每个字符ASCII码+3
char encrypt_char(char c) {
    return c + 3;
}

volatile sig_atomic_t keep_running = 1;

void signal_handler(int signal) {
    if (signal == SIGINT || signal == SIGTERM) {
        keep_running = 0;
    }
}

int main() {
    // 注册信号处理函数
    signal(SIGINT, signal_handler);
    signal(SIGTERM, signal_handler);

    fd_set read_fds;
    char buffer[256];
    FILE *file = fopen("c.txt", "w"); // 打开文件用于写入加密数据
    
    
    if (!file) {
        perror("无法打开文件");
        exit(1);
    }

    while (keep_running) {
        FD_ZERO(&read_fds);
        FD_SET(STDIN_FILENO, &read_fds);

        int activity = select(STDIN_FILENO + 1, &read_fds, NULL, NULL, NULL);

        if (activity > 0 && FD_ISSET(STDIN_FILENO, &read_fds)) {
            if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
                size_t len = strlen(buffer);
                for (size_t i = 0; i < len; i++) {
                    char encrypted = encrypt_char(buffer[i]);
                    fputc(encrypted, file); // 写入加密字符到文件
                }
                fflush(file); // 刷新缓冲区以确保数据写入文件
            }
        }
    }

    // 添加退出提示信息
    printf("正在保存文件并安全退出...\n");
    fclose(file); // 关闭文件
    return 0;
}